package outils.gestionnairefichier;

import java.util.HashMap;
import outils.Outils;
import outils.gestionnairefichier.ex.ErreurLecture;

/**
 *
 * @param <T>
 * @author nicolas
 */
public abstract class GestionnaireFichier<T> {

	private HashMap<String, T> fichiersCharges = new HashMap<String, T>();

	/**
	 * Si le fichier a déjà été chargé on retourne son contenu présent dans
	 * fichiersCharges sinon on l'enregistre dans fichiersCharges puis on le
	 * retourne
	 *
	 * @param fichier l'adresse du fichier
	 * @return l'objet que l'on souhaite récupérer
	 */
	public T get(String fichier) {
		if (fichiersCharges.containsKey(fichier)) {
			return fichiersCharges.get(fichier);
		} else {
			try {
				T fichierCharge;
				fichierCharge = charger(fichier);
				fichiersCharges.put(fichier, fichierCharge);
				return fichierCharge;
			} catch (ErreurLecture ex) {
				Outils.erreur(ex.toString());
				System.exit(1);
				return null;
			}
		}
	}

	/**
	 *
	 * @param fichier l'adresse du fichier
	 * @return un T type d'objet que le fichier chargé doit retourner
	 * @throws ErreurLecture
	 */
	protected abstract T charger(String fichier) throws ErreurLecture;
}
